package com.example.petcare.service.serviceImpl;

import com.example.petcare.exception.StatusException;
import com.example.petcare.mapper.AdminMapper;
import com.example.petcare.pojo.*;
import com.example.petcare.service.AdminService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


@Service
public class AdminServiceImpl implements AdminService {

    @Autowired
    private AdminMapper adminMapper;

    @Override
    public Admin findByUsername(String username) {
        // 根据用户名查询用户
        Admin a = adminMapper.findByUsername(username);
        return a;
    }

    // 查询服务商审核列表（分页查询）
    @Override
    public PageBean<Provider> list(Integer pageNum, Integer pageSize) {

        // 1.创建PageBean对象
        PageBean<Provider> pb = new PageBean<>();

        // 2.开启分页查询     PageHelper
        PageHelper.startPage(pageNum,pageSize);// 返回的是Page对象

        // 3.调用mapper，查询所有未审核的服务商
        List<Provider> list = adminMapper.list();

        // Page中提供了方法，可以获取PageHelper分页查询后 得到的总记录条数和当前页数据
        // 不强转，多肽它是不允许使用父类类型去调用子类特有的方法的，所以需要强转
        Page<Provider> p =(Page<Provider>) list;// Page是一个List的子类，实现类

        // 把数据填充到PageBean对象中
        pb.setTotal(p.getTotal());
        pb.setItems(p.getResult());

        return pb;
    }

    // 审核不通过（更新rejectStatus）
    @Override
    public void reject(Integer providerId) {

        // 如果这个服务商的providerStatus已经是1了，就不能再拒绝了
        Provider provider = adminMapper.findById(providerId);

        if(provider.isProviderStatus()){
            throw new StatusException("该服务商已通过审核,不能拒绝");
        }


        adminMapper.reject(providerId);

    }

    // 审核通过（更新providerStatus）
    @Override
    public void pass(Integer providerId) {

        // 先查出这个服务商的rejectStatus，如果是1，就不让通过
        Provider provider = adminMapper.findById(providerId);

        if(provider.isRejectStatus()){
            throw new StatusException("该服务商已被拒绝,不能通过审核");
        }


        adminMapper.pass(providerId);
    }

    // 查看用户列表（分页查询）
    @Override
    public PageBean<User> userList(Integer pageNum, Integer pageSize) {

        // 1.创建PageBean对象
        PageBean<User> pb = new PageBean<>();

        // 2.开启分页查询     PageHelper
        PageHelper.startPage(pageNum,pageSize);// 返回的是Page对象

        // 3.调用mapper，查询所有用户
        List<User> list = adminMapper.userList();

        // Page中提供了方法，可以获取PageHelper分页查询后 得到的总记录条数和当前页数据
        // 不强转，多肽它是不允许使用父类类型去调用子类特有的方法的，所以需要强转
        Page<User> p =(Page<User>) list;// Page是一个List的子类，实现类

        // 把数据填充到PageBean对象中
        pb.setTotal(p.getTotal());
        pb.setItems(p.getResult());

        return pb;
    }

    // 审核通过（更新用户状态）
    @Override
    public void userPass(Integer userId) {

        adminMapper.userPass(userId);

    }

    // 审核不通过（更新用户状态）
    @Override
    public void userReject(Integer userId) {
        adminMapper.userReject(userId);
    }

    // 商品审核通过
    @Override
    public void goodsPass(Integer gId) {
        adminMapper.goodsPass(gId);
    }

    // 商品审核不通过
    @Override
    public void goodsReject(Integer gId) {
        adminMapper.goodsReject(gId);
    }

    @Override
    public void addAuditComment(Integer gId, String auditComment) {

        // 调用mapper方法添加审核意见
        adminMapper.addAuditComment(gId, auditComment);
    }

    // 获取所有待审核的商品列表
    @Override
    public PageBean<Goods> getGoodsList(Integer pageNum, Integer pageSize,
                                        Boolean isOnSale, Double price, Integer providerId) {

        // 1.创建PageBean对象
        PageBean<Goods> pb = new PageBean<>();

        // 2.开启分页查询     PageHelper
        PageHelper.startPage(pageNum,pageSize);// 返回的是Page对象

        // 3.调用mapper，查询所有商品
        List<Goods> list = adminMapper.getGoodsList( isOnSale, price, providerId);

        // Page中提供了方法，可以获取PageHelper分页查询后 得到的总记录条数和当前页数据
        // 不强转，多肽它是不允许使用父类类型去调用子类特有的方法的，所以需要强转
        Page<Goods> p =(Page<Goods>) list;// Page是一个List的子类，实现类

        // 把数据填充到PageBean对象中
        pb.setTotal(p.getTotal());
        pb.setItems(p.getResult());

        return pb;
    }

    // 查看用户宠物列表
    @Override
    public List<Pet> petlist(Integer userId) {

        // 调用mapper方法查询用户宠物列表
        List<Pet> pets = adminMapper.petlist(userId);
        return pets;



    }
}
